#10808: 알파벳 개수
문제:
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
입력:
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
풀이:
- 이 문제를 풀기 위해서는 ASCII 코드라는 개념을 알아야 한다. ASCII 코드란 우리가 컴퓨터로 쓰는 각종 문자(’a’, ‘[’, ‘&’….)는 정해진 숫자 코드가 있다. 예를 들면 ‘a’는 97이다. 따라서 a에 1을 더하면 b가 된다. 아래는 각 문자를 숫자로 표현한 ASCII 표이다.
출처: https://www.w3resource.com/cpp-exercises/for-loop/cpp-for-loop-exercise-61.php
- 그래서 이 문제는 알파벳의 개수를 세어주는 문제인데 알파벳 순서대로 인덱스가 되어있다. 따라서 우리는 a, b, c, d….를 0, 1, 2, 3 ….로 만들어주어야 한다. 그러면 여기서 사용할 수 있는 방식은 주어진 알파벳에서 ‘a’의 ASCII 코드를 빼주면 된다.
- 굳이 ASCII 코드를 외울 필요는 없고 문자열끼리 서로 뺄셈 연산을 해주면 알아서 값이 나온다. 따라서 정답을 저장하는 배열에 문자 - ’a’의 인덱스를 +1 해주면 된다.
⚠️배열을 선언 할 때 = {}를 해주어야 되는 이유는 그냥 선언을 하고 아무 값도 안주어지면 0이 아닐 수도 있기 때문에 저렇게 선언함으로서 모든 값을 0으로 초기화를 해줄 수 있다. 참고로 = {0}은 제일 첫번째 인덱스의 값만 0이 되므로 ={}를 사용하자.
코드:
#include <iostream>
using namespace std;
int main(){
string s;
int alphabet[26] = {};
//입력
getline(cin, s);
//알파벳에 맞는 인덱스에 개수 +1
for(int i = 0; i < s.size(); i++){
alphabet[s[i]-'a']++;
}
//출력
for(int i = 0; i < 26; i++){
cout << alphabet[i] << " ";
}
}
Leave a comment